package com.chromatic.competition.inteface;

import com.chromatic.competition.model.Friend;
import com.chromatic.competition.model.UserMessage;
import com.google.gson.JsonObject;
import com.chromatic.competition.model.LoginRequestBody;
import com.chromatic.competition.model.RegisterRequestBody;

import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface UserInitializationService {
    /**
     * 发起POST请求以注册用户
     *
     * @param registerRequestBody 注册请求体
     * @return 包含注册结果的Call对象
     */
    @POST("user/register")
    @Headers("Content-Type: application/json")
    Call<JsonObject> registerUser(@Body RegisterRequestBody registerRequestBody);

    /**
     * 发起POST请求以用户登录
     *
     * @param loginRequestBody 登录请求体
     * @return 包含登录结果的Call对象
     */
    @POST("user/login")
    @Headers("Content-Type: application/json")
    Call<Map<String, Object>> loginUser(@Body LoginRequestBody loginRequestBody);

    /**
     * 发起POST请求以发送短信验证码
     *
     * @param phoneNumber 手机号码
     * @return 包含发送结果的Call对象
     */
    @POST("sms/send")
    @Headers("Content-Type: application/json")
    Call<String> sendSmsCode(@Query("phone") String phoneNumber);

    /**
     * 发起POST请求以发送聊天消息
     *
     * @param requestBody 请求体
     * @return 包含发送结果的Call对象
     */
    @POST("chatbot")
    @Headers({
            "Content-Type: application/json",
            "User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
    })
    Call<Map<String, Object>> sendMessage(@Body JsonObject requestBody);

    /**
     * 发起GET请求以获取用户的好友列表视图
     *
     * @param userId 用户ID
     * @return 包含好友列表视图的Call对象
     */
    @GET("user-friends-groups/{userId}/friends_list_view")
    Call<List<Friend>> getUserFriendsListView(@Path("userId") int userId);

    /**
     * 发起GET请求以获取两个用户之间的聊天消息
     *
     * @param userId1 用户ID1
     * @param userId2 用户ID2
     * @return 包含聊天消息列表的Call对象
     */
    @GET("user-messages/get/between/{userId1}/and/{userId2}")
    Call<List<UserMessage>> getMessagesBetweenUsers(@Path("userId1") int userId1, @Path("userId2") int userId2);
}